<?php
include_once'config.php';
//bili API
//输入biliapi（av号）以数组返回全部
//输入biliapi（av号,'类型'）返回指定类型
//输入biliapi（av号,'',pageh页数）返回该分页全部类型
/*返回类型：
tid-tid        typename-分类名称
play-播放数    review-评论数
video_review-弹幕数   coins-硬币数
favorites-收藏数
title-标题     allow_bp和allow_feed-不知是啥
description-作品作者留言
tag-标签       pic-视频封面图路径
author-up主    mid-mid
pages-分P      instant_server-即时服务器
created-投稿时间（linux时间戳）
created_at-投稿时间
credit-credit    spid-spid，好像没有什么卵用
src-不知是啥     cid-cid
partname-好像也不知是啥
offsite-外链播放器
*/
function biliapi($aid,$lx='all',$page=1){
 $appkey=APPKEY;
 if(empty($appkey)){
   $xml=@simplexml_load_file('http://linzyjx.com/api/bilixml.php?aid='.$aid.'&page='.$page);
  }else{
   $xml=@simplexml_load_file('http://api.bilibili.com/view?type=xml&appkey='.$appkey.'&id='.$aid.'&page='.$page);
  }
 if(($xml=='')||($xml->code==-404)){
  return false;
 }
 if(($lx=='')||($lx=='all')){
  return (array)$xml;
 }else{
  if($xml->$lx==''){
   return false;
 }else{
   $xml=(array)$xml;
   return $xml[$lx];
  }
 }
}


//抓取vcran的html元素数据
//参数可见函数内注释
function get_vcran_web(){
 $url='http://vc.biliran.moe';
 $lines_string=@file_get_contents($url);
 //出错重试
 if(!$lines_string){
   $lines_string=@file_get_contents($url);
    if(!$lines_string){
	  return false;
	  break;
	}
  }
 //输出原html页面数据
 $data['htmdata']=$lines_string;
 //获取期数
 preg_match_all('|<h4 id="MainList_Title">([\s\S]+?)</h4>|',$lines_string,$data['num']);
 preg_match_all('/(\d{3}(\.\d+)?)/is',$data['num'][1][0],$data['num']);
 $data['num']=(int)$data['num'][1][0];
 //获取数据更新时间
 preg_match_all('|<i>收录更新时间：([\s\S]+?)</i>|',$lines_string,$data['inctime']);
 $data['inctime']=$data['inctime'][1][0];
 //获取收录数
 preg_match_all('|<i>总计收录：([\s\S]+?)</i>|',$lines_string,$data['incnum']);
 preg_match_all('/(\d+(\.\d+)?)/is',$data['incnum'][1][0],$data['incnum']);
 $data['incnum']=$data['incnum'][1][0];
 //获取排行数据
 preg_match_all('|<script>([\s\S]+?)</script>|',$lines_string,$data['incdata']);
 $data['incdata']=$data['incdata'][1][1];
 //获取b站当期排行视频id(依赖incdata）
 preg_match_all('|avid:"(\S+?)"|',$data['incdata'],$data['vcavid']);
 $data['vcavid']=$data['vcavid'][1][0];
 //获取视频封面
 $data['vcimg']=biliapi($data['vcavid'],'pic');
 //获取缓存时间
 $data['cachetime']=date('Y-n-j G:i:s');
 return $data;
}

//解析incdata的数据
/*
title-标题    avid-av号
pts-得点      play-播放数
comment-评论数    comment-收藏数
yb-硬币数     publicdate-投稿日期
image-封面图片
*/
 function get_vcran_data($ListObject){
 preg_match_all('|"title":"([\s\S]+?)"|', $ListObject, $reg['title']);
 preg_match_all('|"avid":(\S+?),|', $ListObject, $reg['avid']);
 preg_match_all('|"pts":(\S+?),|', $ListObject, $reg['pts']);
 preg_match_all('|"play":(\S+?),|', $ListObject, $reg['play']);
 preg_match_all('|"comment":(\S+?),|', $ListObject, $reg['comment']);
 preg_match_all('|"favourite":(\S+?),|', $ListObject, $reg['favourite']);
 preg_match_all('|"yb":(\S+?),|', $ListObject, $reg['yb']);
 preg_match_all('|"publicdate":"([\s\S]+?)"|', $ListObject, $reg['publicdate']);
 preg_match_all('|"image":"([\s\S]+?)"|', $ListObject, $reg['image']);
 preg_match_all('|avid:"(\S+?)"|', $ListObject, $reg['vcavid']);
 //转换数组
 $reg['title']=$reg['title'][1];
 $reg['avid']=$reg['avid'][1];
 $reg['pts']=$reg['pts'][1];
 $reg['play']=$reg['play'][1];
 $reg['comment']=$reg['comment'][1];
 $reg['favourite']=$reg['favourite'][1];
 $reg['yb']=$reg['yb'][1];
 $reg['publicdate']=$reg['publicdate'][1];
 $reg['image']=$reg['image'][1];
 $reg['vcavid']=$reg['vcavid'][1];
 return $reg;
}

/*
从xml文件载入ran数据
num-期数    cachetime-缓存时间
incnum-缓存时总收录数   inctime-本家数据更新时间
vcavid-b站本期排行视频id   vcimg-视频封面图路径
incdata-缓存数据     other-备注
*/
function get_xml(){
 global $ran_sort;
 global $ran_link;
 global $ranxml;
 global $ransum;
 $xml=simplexml_load_file('data/vcran.xml');
 $ranxml=$xml->xpath(vcran);
 $ransum=count($ranxml);
//载入数组：ran_sort-排序数组；ran_link-映射数组
 for($i=0;$i<$ransum;$i++){
  $a=(integer)$ranxml[$i]->num;
  $ran_sort[$i]=$a;
  $ran_link[$a]=$i;
 }
 rsort($ran_sort,SORT_NUMERIC);
}

//写入从vcran获取的数据
function addvcxml($vcdata){
 $xmlsrc='data/vcran.xml';
 //获取数据，并检查是否正常
 $xml=simplexml_load_file($xmlsrc);
 //检查数据是否已存在
 $rxml=$xml->xpath(vcran);
 $rsum=count($rxml);
 global $advnum;
 $advnum=$vcdata['num'];
 for($i=0;$i<$rsum;$i++){
   if($advnum==$rxml[$i]->num){
   return 'have';
   }
 }
 //写入数据
  //写入html原数据
 $fpad=fopen('data/htm/'.$vcdata['num'].'.html',"wb");
  fwrite($fpad,$vcdata['htmdata']);
  fclose($fpad);
 
 $vcran = $xml->addChild('vcran','');
 $vcran->addChild('num',$vcdata['num']);
 $vcran->addChild('cachetime',$vcdata['cachetime']);
 $vcran->addChild('incnum',$vcdata['incnum']);
 $vcran->addChild('inctime',$vcdata['inctime']);
 $vcran->addChild('vcavid',$vcdata['vcavid']);
 $vcran->addChild('vcimg',$vcdata['vcimg']);
 $vcran->addChild('incdata',$vcdata['incdata']);
 $xml->asXML($xmlsrc);
}
?>
 